# -*- coding: utf-8 -*-

from plugmgr import plugin
from twisted.python.log import msg
import os
import sqlite3

__all__ = ["access"]

class access(plugin):
    """
    таблица access:
    env: '' (глобальный) или jid конференции
    jid - jid пользователя
    level - уровень доступа

    глобальный уровень доступа имеет приоритет над локальным"""
    requires = ["cmd", "config"]
    def __init__(self, bot):
        self.bot = bot
        bot["cmd"].addHandler("show_access", self.show_access)
        prefix = bot.config.var_dir
        if not os.access(prefix, os.W_OK): os.mkdir(prefix)
        self.db = sqlite3.connect(os.path.join(prefix, "access_lists.db"), 0)
        self.cursor = self.db.cursor()
        self.cursor.execute("SELECT name FROM SQLITE_MASTER WHERE type='table' AND name='access'")
        if not self.cursor.fetchall():
            # такой таблички в бд нет, надо создать
            # типы данных: http://www.sqlite.org/datatype3.html
            msg("Initializing access_lists.db")
            self.cursor.execute("CREATE TABLE access (env text, jid text, level integer)")
            self.cursor.execute("CREATE UNIQUE INDEX jid_key ON access(env, jid)")
    def get(self, jid, maybeMuc=True):
        njid = self.bot["config"]._normalize(jid)
        access = self.bot.config.access_levels.get(njid)
        if not access is None: return access
        elif self.bot.has("muc"): access = self.bot["muc"].access(jid)
        else: access = 0
        self.cursor.execute("SELECT level FROM access WHERE jid=? and ((env='') or (env=?)) order by length(env) asc",\
            (jid, njid))
        results = self.cursor.fetchall()
        if results: access = results[0][0]
        return access
    def unload(self):
        self.bot["cmd"].removeHandler("show_access")
        self.db.commit()
        self.db.close()
    def show_access(self, c):
        c.reply(str(self.get(c.source)))
